/**
 * requetesReseau.java    19/04/2012
 */

package l3.info.projetJava.rmi;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;

import l3.info.projetJava.client.Message;
import l3.info.projetJava.client.Utilisateur;
import l3.info.projetJava.serveur.DAOMessage;

/**
 * Méthode à écrire dans ServeurRequetes (to override)
 * @author Aboulkacem Hamid & Loïc Martinez
 */

public interface RequetesReseau extends Remote {

    /**
     * Permet de savoir si un utilisateur existe, et si oui,
     * on va charger toutes ses données, sinon on ne fait rien
     * @param u, l'utilisateur à connecter
     * @param urlBd
     * @param userBd
     * @param passwdBd
     * @param tableUser
     * @param tableMessage
     */
    public Utilisateur utilisateurExists(Utilisateur u, String tableUser,
            String tableMessage) throws RemoteException;

    /**
     * Permet de savoir si l'utilisateur passé en paramètres existe
     * dans la base de données (bon pseudo et bon mot de passe)
     * @param u, l'utilisateur que l'on vérifie
     * @return l'utilisateur avec ses informations si la vérification
     *         a été bonne, tel quel sinon
     */
    public Utilisateur utilisateurExists(Utilisateur u) throws RemoteException;

    /**
     * Permet d'ajouter un utilisateur à suivre
     * @param myId, mon numutilisateur
     * @param id, le numutilisateur de la personne à suivre
     * @param table, la table suivre
     * @return le pseudo de la personne à suivre
     */
    public String suivreUtilisateur(int myId, int id, String table)
            throws RemoteException;

    /**
     * Permet d'ajouter un utilisateur à suivre
     * @param myId, mon numutilisateur
     * @param id, le numutilisateur de la personne à suivre
     * @return le pseudo de la personne à suivre
     */
    public String suivreUtilisateur(int myId, int id) throws RemoteException;

    /**
     * Permet de supprimer un utilisateur suivi
     * @param myId, mon numutilisateur
     * @param idToDelete, le numutilisateur de la personne à supprimer
     * @param table, la table suivre
     */
    public void removeUser(int myId, int idToDelete, String table)
            throws RemoteException;

    /**
     * Permet de supprimer un utilisateur suivi
     * @param myId, mon numutilisateur
     * @param idToDelete, le numutilisateur de la personne à supprimer
     */
    public void removeUser(int myId, int idToDelete) throws RemoteException;
    
    /**
     * Permet d'envoyer le message d'un utilisateur
     * @param myId, mon numutilisateur
     * @param message, le message à envoyer
     * @param table, la table
     */
    public void sendMessage(int myId, String message, String table)
            throws RemoteException;
    
    /**
     * Permet d'envoyer le message d'un utilisateur
     * @param myId, mon numutilisateur
     * @param message, le message à envoyer
     */
    public void sendMessage(int myId, String message)
            throws RemoteException;

    /**
     * Permet de récupérer nbMessages à partir du aPartir messages
     * @param aPartir, message à partir duquel on va en chercher
     * @param nbMessages, le nombre de messages à récupérer
     * @param id, l'écrivain du message
     */
    public List<Message> getMessages(int aPartir, int nbMessages, int myId)
            throws RemoteException;
    
    /**
     * Permet de récupérer nbMessages à partir du aPartir messages
     * @param aPartir, message à partir duquel on va en chercher
     * @param nbMessages, le nombre de messages à récupérer
     * @param id, l'écrivain du message
     * @param date1, la 1ère date
     * @param date2, la 2ème date
     */
    public List<Message> getMessages(int aPartir, int nbMessages, int myId,
            String date1, String date2)
            throws RemoteException;
    
    /**
     * Permet de récupérer nbMessages à partir du aPartir messages
     * @param aPartir, message à partir duquel on va en chercher
     * @param nbMessages, le nombre de messages à récupérer
     * @param id, l'écrivain du message
     * @param table, la table message
     * @param date1, la 1ère date
     * @param date2, la 2ème date
     */
    public List<Message> getMessages(int aPartir, int nbMessages, int myId,
            String table, String date1, String date2) throws RemoteException;
    
    /**
     * Permet de savoir combien il y aura de messages au prochain "suivant"
     * @param aPartir, le nombre de messages à partir de aPartir
     * @param nbMessages, le nombre de messages à voir
     * @param myId, mon id d'utilisateur
     * @return le nombre de messages restants
     */
    public int getNumberProchainsMessages(
            int aPartir, int nbMessages, int myId) throws RemoteException;
    
    /**
     * Permet de savoir combien il y aura de messages au prochain "suivant"
     * @param aPartir, le nombre de messages à partir de aPartir
     * @param nbMessages, le nombre de messages à voir
     * @param myId, mon id d'utilisateur
     * @param table, la table SQL
     * @return le nombre de messages restants
     */
    public int getNumberProchainsMessages(
            int aPartir, int nbMessages, int myId, String table)
                    throws RemoteException;
    
    /**
     * Permet de savoir combien il y aura de messages au prochain "suivant"
     * @param aPartir, le nombre de messages à partir de aPartir
     * @param nbMessages, le nombre de messages à voir
     * @param myId, mon id d'utilisateur
     * @param date1, la 1ère date
     * @param date2, la 2ème date
     * @return le nombre de messages restants
     */
    public int getNumberProchainsMessages(
            int aPartir, int nbMessages, int myId,
            String date1, String date2) throws RemoteException;
    
    /**
     * Permet de savoir combien il y aura de messages au prochain "suivant"
     * @param aPartir, le nombre de messages à partir de aPartir
     * @param nbMessages, le nombre de messages à voir
     * @param myId, mon id d'utilisateur
     * @param table, la table SQL
     * @param date1, la 1ère date
     * @param date2, la 2ème date
     * @return le nombre de messages restants
     */
    public int getNumberProchainsMessages(
            int aPartir, int nbMessages, int myId, String table,
            String date1, String date2)
                    throws RemoteException;
}